home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2posx10.zoo / m2posix.10 / include / oscalls.m2h next >
Encoding:
Text File  |  1993-10-09  |  29.2 KB  |  1,252 lines

  1. /* Definitionen fuer "GEMDOS" & "BIOS"-``Inline''-Betriebssystemaufrufe.
  2.  *
  3.  * Die Datei ist mit: #include "oscalls.m2h"  noch vor dem eigentlichen
  4.  * Programmcode als letzte ``Importdatei'' in die M2-Datei einzuladen.
  5.  * Die Datei kann sowohl im aktuellen Verzeichnis zusammen mit den M2-Dateien
  6.  * stehen, als auch im Verzeichnis, in dem der Praeprozessor nach Include-
  7.  * Dateien sucht; falls der GNU-Praeprozessor (gcc-cpp) benutzt wird, muss
  8.  * hierfuer die Environmentvariable GNUINC gesetzt werden, z.B.:
  9.  *
  10.  *   setenv GNUINC f:\usr\include\m2
  11.  *
  12.  * Die Argumente der Makros sollten nur einfache (nicht Teil eines RECORDs
  13.  * oder eines ARRAYs), lokale (vor allem keine VAR-Parameter) Variablen sein.
  14.  *
  15.  * Es wird nur das Datenregister D0 fuer die Parameteruebergabe benoetigt,
  16.  * das TOS selbst veraendert die Register D0-D2 und A0-A2.
  17.  */
  18.  
  19. /* "BIOS"-Funktionsnummern */
  20. #define GETMPB 0
  21. #define BCONSTAT 1
  22. #define BCONIN 2
  23. #define BCONOUT 3
  24. #define RWABS 4
  25. #define SETEXC 5
  26. #define TICKCAL 6
  27. #define GETBPB 7
  28. #define BCOSTAT 8
  29. #define MEDIACH 9
  30. #define DRVMAP 10
  31. #define KBSHIFT 11
  32.  
  33. /* "XBIOS"-Funktionsnummern */
  34. #define SUPEXEC 38
  35.  
  36. /* "GEMDOS"-Funktionsnummern */
  37. #define PTERM0 0
  38. #define CCONIN 1
  39. #define CCONOUT 2
  40. #define CAUXIN 3
  41. #define CAUXOUT 4
  42. #define CPRNOUT 5
  43. #define CRAWIO 6
  44. #define CRAWCIN 7
  45. #define CNECIN 8
  46. #define CCONWS 9
  47. #define CCONRS 10
  48. #define CCONIS 11
  49. #define DSETDRV 14
  50. #define CCONOS 16
  51. #define CPRNOS 17
  52. #define CAUXIS 18
  53. #define CAUXOS 19
  54. #define MADDALT 20
  55. #define SREALLOC 21
  56. #define DGETDRV 25
  57. #define FSETDTA 26
  58. #define SUPER 32
  59. #define TGETDATE 42
  60. #define TSETDATE 43
  61. #define TGETTIME 44
  62. #define TSETTIME 45
  63. #define FGETDTA 47
  64. #define SVERSION 48
  65. #define PTERMRES 49
  66. #define DFREE 54
  67. #define DCREATE 57
  68. #define DDELETE 58
  69. #define DSETPATH 59
  70. #define FCREATE 60
  71. #define FOPEN 61
  72. #define FCLOSE 62
  73. #define FREAD 63
  74. #define FWRITE 64
  75. #define FDELETE 65
  76. #define FSEEK 66
  77. #define FATTRIB 67
  78. #define MXALLOC 68
  79. #define FDUP 69
  80. #define FFORCE 70
  81. #define DGETPATH 71
  82. #define MALLOC 72
  83. #define MFREE 73
  84. #define MSHRINK 74
  85. #define PEXEC 75
  86. #define PTERM 76
  87. #define FSFIRST 78
  88. #define FSNEXT 79
  89. #define FRENAME 86
  90. #define FDATIME 87
  91. #define FLOCK 92
  92.  
  93. /* MultiGEM-Erweiterung */
  94. #define MFORK 112
  95.  
  96. /* Mag!X-Erweiterung */
  97. #define SCONFIG 51
  98.  
  99. /* MiNT-Erweiterungen */
  100. #define SYIELD 255
  101. #define FPIPE 256
  102. #define FCNTL 260
  103. #define FINSTAT 261
  104. #define FOUTSTAT 262
  105. #define FGETCHAR 263
  106. #define FPUTCHAR 264
  107. #define PWAIT 265
  108. #define PNICE 266
  109. #define PGETPID 267
  110. #define PGETPPID 268
  111. #define PGETPGRP 269
  112. #define PSETPGRP 270
  113. #define PGETUID 271
  114. #define PSETUID 272
  115. #define PKILL 273
  116. #define PSIGNAL 274
  117. #define PVFORK 275
  118. #define PGETGID 276
  119. #define PSETGID 277
  120. #define PSIGBLOCK 278
  121. #define PSIGSETMASK 279
  122. #define PUSRVAL 280
  123. #define PDOMAIN 281
  124. #define PSIGRETURN 282
  125. #define PFORK 283
  126. #define PWAIT3 284
  127. #define FSELECT 285
  128. #define PRUSAGE 286
  129. #define PSETLIMIT 287
  130. #define TALARM 288
  131. #define PAUSE 289
  132. #define SYSCONF 290
  133. #define PSIGPENDING 291
  134. #define DPATHCONF 292
  135. #define PMSG 293
  136. #define FMIDIPIPE 294
  137. #define PRENICE 295
  138. #define DOPENDIR 296
  139. #define DREADDIR 297
  140. #define DREWINDDIR 298
  141. #define DCLOSEDIR 299
  142. #define FXATTR 300
  143. #define FLINK 301
  144. #define FSYMLINK 302
  145. #define FREADLINK 303
  146. #define DCNTL 304
  147. #define FCHOWN 305
  148. #define FCHMOD 306
  149. #define PUMASK 307
  150. #define PSEMAPHORE 308
  151. #define DLOCK 309
  152. #define PSIGPAUSE 310
  153. #define PSIGACTION 311
  154. #define PGETEUID 312
  155. #define PGETEGID 313
  156. #define PWAITPID 314
  157. #define DGETCWD 315
  158. #define SALERT 316
  159.  
  160.  
  161. #ifdef MM2
  162. #define BTRAP 13
  163. #define XTRAP 14
  164. #define DTRAP 1
  165. #else
  166. #define BTRAP 4E4DH
  167. #define XTRAP 4E4EH
  168. #define DTRAP 4E41H
  169.  
  170. #define ADDQ2 548FH /* ADDQ.l #2, sp */
  171. #define ADDQ4 588FH /* ADDQ.l #4, sp */
  172. #define ADDQ6 5C8FH /* ADDQ.l #6, sp */
  173. #define ADDQ8 508FH /* ADDQ.l #8, sp */
  174. #define LEA 4FEFH /* LEA <const>(sp), sp */
  175.  
  176. #define PSHW 3F00H /* MOVE.W D0, -(sp) */
  177. #define PSHL 2F00H /* MOVE.L D0, -(sp) */
  178. #define PSHC 3F3CH /* MOVE.W #<const>, -(sp) */
  179. #endif
  180.  
  181. #if (defined HM2) || (defined HM2_OLD)
  182. #  define SAVEREGS CODE(48E7H,2020H);/* movem.l d2/a2, -(sp) */
  183. #  define RESTOREREGS CODE(4CDFH,0404H);/* movem.l (sp)+, d2/a2 */
  184. #else
  185. #  define SAVEREGS
  186. #  define RESTOREREGS
  187. #endif
  188.  
  189.  
  190. #if (defined LPRM2) || (defined SPCM2)
  191. #undef CODE
  192.  
  193. PROCEDURE BIOS0(f:WORD);CODE(BTRAP);
  194. PROCEDURE BIOS1w(p,f:WORD);CODE(BTRAP);
  195. PROCEDURE BIOS2w(p2,p1,f:WORD);CODE(BTRAP);
  196. PROCEDURE BIOS1w1l(p2:LONGCARD;p1,f:WORD);CODE(BTRAP);
  197. PROCEDURE BIOS1w1l3w1l(p6:LONGCARD;p5,p4,p3:WORD;p2:LONGCARD;p1,f:WORD);CODE(BTRAP);
  198. PROCEDURE BIOS1l(p:LONGCARD;f:WORD);CODE(BTRAP);
  199.  
  200. PROCEDURE XBIOS1l(p1:LONGCARD;f:WORD);CODE(XTRAP);
  201.  
  202. PROCEDURE GEMDOS0(f:WORD);CODE(DTRAP);
  203. PROCEDURE GEMDOS1w(p,f:WORD);CODE(DTRAP);
  204. PROCEDURE GEMDOS2w(p2,p1,f:WORD);CODE(DTRAP);
  205. PROCEDURE GEMDOS3w(p3,p2,p1,f:WORD);CODE(DTRAP);
  206. PROCEDURE GEMDOS1w1l(p2:LONGCARD;p1,f:WORD);CODE(DTRAP);
  207. PROCEDURE GEMDOS1w2l(p3,p2:LONGCARD;p1,f:WORD);CODE(DTRAP);
  208. PROCEDURE GEMDOS1w3l(p4,p3,p2:LONGCARD;p1,f:WORD);CODE(DTRAP);
  209. PROCEDURE GEMDOS2w1l(p3:LONGCARD;p2,p1,f:WORD);CODE(DTRAP);
  210. PROCEDURE GEMDOS2w2l(p4,p3:LONGCARD;p2,p1,f:WORD);CODE(DTRAP);
  211. PROCEDURE GEMDOS1w1l1w(p3:WORD;p2:LONGCARD;p1,f:WORD);CODE(DTRAP);
  212. PROCEDURE GEMDOS1l(p1:LONGCARD;f:WORD);CODE(DTRAP);
  213. PROCEDURE GEMDOS2l(p2,p1:LONGCARD;f:WORD);CODE(DTRAP);
  214. PROCEDURE GEMDOS1l1w(p2:WORD;p1:LONGCARD;f:WORD);CODE(DTRAP);
  215. PROCEDURE GEMDOS1l2w(p3,p2:WORD;p1:LONGCARD;f:WORD);CODE(DTRAP);
  216. PROCEDURE GEMDOS1l1w1l(p3:LONGCARD;p2:WORD;p1:LONGCARD;f:WORD);CODE(DTRAP);
  217. #define CODE INLINE
  218.  
  219. #ifdef __OSCALLS__
  220. /* Die Syntax mit den Punkten fuer optionale Parameter ist
  221.  * moeglicherweise GNU-CPP-spezifisch.
  222.  */
  223.   #define _INLINE(p...) /* Stackkorrektur kann entfallen */
  224. #else
  225.   #define _INLINE INLINE
  226. #endif
  227.  
  228. #define BCALL0(f)\
  229.  BIOS0(f);_INLINE(ADDQ2)
  230. #define BCALL1w(f,p)\
  231.  BIOS1w(p,f);_INLINE(ADDQ4)
  232. #define BCALL2w(f,p1,p2)\
  233.  BIOS1w1l(p2,p1,f);_INLINE(ADDQ6)
  234. #define BCALL1w1l(f,p1,p2)\
  235.  BIOS1w1l(p2,p1,f);_INLINE(ADDQ8)
  236. #define BCALL1w1l3w1l(f,p1,p2,p3,p4,p5,p6)\
  237.  BIOS1w1l3w1l(p6,p5,p4,p3,p2,p1,f);_INLINE(LEA,18)
  238. #define BCALL1l(f,p)\
  239.  BIOS1w(p,f);_INLINE(ADDQ6)
  240.  
  241. #define XCALL1l(f,p)\
  242.  XBIOS1l(p,f);_INLINE(ADDQ6)
  243.  
  244.  
  245. #define DCALL0(f)\
  246.  GEMDOS0(f);_INLINE(ADDQ2)
  247. #define DCALL1w(f,p)\
  248.  GEMDOS1w(p,f);_INLINE(ADDQ4)
  249. #define DCALL2w(f,p1,p2)\
  250.  GEMDOS2w(p2,p1,f);_INLINE(ADDQ6)
  251. #define DCALL3w(f,p1,p2,p3)\
  252.  GEMDOS3w(p3,p2,p1,f);_INLINE(ADDQ8)
  253. #define DCALL1w1l(f,p1,p2)\
  254.  GEMDOS1w1l(p2,p1,f);_INLINE(ADDQ8)
  255. #define DCALL1w2l(f,p1,p2,p3)\
  256.  GEMDOS1w2l(p3,p2,p1,f);_INLINE(LEA,12)
  257. #define DCALL1w3l(f,p1,p2,p3,p4)\
  258.  GEMDOS1w3l(p4,p3,p2,p1,f);_INLINE(LEA,16)
  259. #define DCALL2w1l(f,p1,p2,p3)\
  260.  GEMDOS2w1l(p3,p2,p1,f);_INLINE(LEA,10)
  261. #define DCALL2w2l(f,p1,p2,p3,p4)\
  262.  GEMDOS2w2l(p4,p3,p2,p1,f);_INLINE(LEA,14)
  263. #define DCALL1w1l1w(f,p1,p2,p3)\
  264.  GEMDOS1w1l1w(p3,p2,p1,f);_INLINE(LEA,10)
  265. #define DCALL1l(f,p)\
  266.  GEMDOS1l(p,f);_INLINE(ADDQ6)
  267. #define DCALL2l(f,p1,p2)\
  268.  GEMDOS2l(p2,p1,f);_INLINE(LEA,10)
  269. #define DCALL1l1w(f,p1,p2)\
  270.  GEMDOS1l1w(p2,p1,f);_INLINE(ADDQ8)
  271. #define DCALL1l2w(f,p1,p2,p3)\
  272.  GEMDOS1l2w(p3,p2,p1,f);_INLINE(LEA,10)
  273. #define DCALL1l1w1l(f,p1,p2,p3)\
  274.  GEMDOS1l2w(p3,p2,p1,f);_INLINE(LEA,12)
  275.  
  276. #elif (defined TDIM2)
  277.  
  278. #ifdef __OSCALLS__
  279.   #define _BCODE(p...) CODE(BTRAP)
  280.   #define _XCODE(p...) CODE(XTRAP)
  281.   #define _DCODE(p...) CODE(DTRAP)
  282. #else
  283.   #define _BCODE CODE
  284.   #define _XCODE CODE
  285.   #define _DCODE CODE
  286. #endif
  287.  
  288.  
  289. #define BCALL0(f)\
  290.  PUSH(f);_BCODE(BTRAP,ADDQ2)
  291. #define BCALL1w(f,p)\
  292.  PUSH(CARDINAL(p));PUSH(CARDINAL(f));_BCODE(BTRAP,ADDQ4)
  293. #define BCALL2w(f,p1,p2)\
  294.  PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_BCODE(BTRAP,ADDQ6)
  295. #define BCALL1w1l(f,p1,p2)\
  296.  PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_BCODE(BTRAP,ADDQ8)
  297. #define BCALL1w1l3w1l(f,p1,p2,p3,p4,p5,p6)\
  298.  PUSH(LONGCARD(p6));PUSH(CARDINAL(p5));PUSH(CARDINAL(p4));PUSH(CARDINAL(p3));\
  299. PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_BCODE(BTRAP,LEA,18)
  300. #define BCALL1l(f,p)\
  301.  PUSH(LONGCARD(p));PUSH(CARDINAL(f));_BCODE(BTRAP,ADDQ6)
  302.  
  303.  
  304. #define XCALL1l(f,p)\
  305.  PUSH(LONGCARD(p));PUSH(CARDINAL(f));_XCODE(XTRAP,ADDQ6)
  306.  
  307.  
  308. #define DCALL0(f)\
  309.  PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ2)
  310. #define DCALL1w(f,p)\
  311.  PUSH(CARDINAL(p));PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ4)
  312. #define DCALL2w(f,p1,p2)\
  313.  PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ6)
  314. #define DCALL3w(f,p1,p2,p3)\
  315.  PUSH(CARDINAL(p3));PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));\
  316. _DCODE(DTRAP,ADDQ8)
  317. #define DCALL1w1l(f,p1,p2)\
  318.  PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ8)
  319. #define DCALL1w2l(f,p1,p2,p3)\
  320.  PUSH(LONGCARD(p3));PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));\
  321. _DCODE(DTRAP,LEA,12)
  322. #define DCALL1w3l(f,p1,p2,p3,p4)\
  323.  PUSH(LONGCARD(p4));PUSH(LONGCARD(p3));PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));\
  324. PUSH(CARDINAL(f));_DCODE(DTRAP,LEA,16)
  325. #define DCALL2w1l(f,p1,p2,p3)\
  326.  PUSH(LONGCARD(p3));PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));\
  327. _DCODE(DTRAP,LEA,10)
  328. #define DCALL2w2l(f,p1,p2,p3,p4)\
  329.  PUSH(LONGCARD(p4));PUSH(LONGCARD(p3));PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));\
  330. PUSH(CARDINAL(f));_DCODE(DTRAP,LEA,14)
  331. #define DCALL1w1l1w(f,p1,p2,p3)\
  332.  PUSH(CARDINAL(p3));PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));\
  333. _DCODE(DTRAP,LEA,10)
  334. #define DCALL1l(f,p)\
  335.  PUSH(LONGCARD(p));PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ6)
  336. #define DCALL2l(f,p1,p2)\
  337.  PUSH(LONGCARD(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));_DCODE(DTRAP,LEA,10)
  338. #define DCALL1l1w(f,p1,p2)\
  339.  PUSH(CARDINAL(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ8)
  340. #define DCALL1l2w(f,p1,p2,p3)\
  341.  PUSH(CARDINAL(p3));PUSH(CARDINAL(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));\
  342. _DCODE(DTRAP,LEA,10)
  343. #define DCALL1l1w1l(f,p1,p2,p3)\
  344.  PUSH(LONGCARD(p3));PUSH(CARDINAL(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));\
  345. _DCODE(DTRAP,LEA,12)
  346.  
  347.  
  348. #elif (defined MM2)
  349.  
  350. #define BCALL0(f)\
  351.  CALLSYS(BTRAP,CAST(SHORTCARD,f))
  352. #define BCALL1w(f,p)\
  353.  CALLSYS(BTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p))
  354. #define BCALL2w(f,p1,p2)\
  355.  CALLSYS(BTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2))
  356. #define BCALL1w1l(f,p1,p2)\
  357.  CALLSYS(BTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2))
  358. #define BCALL1w1l3w1l(f,p1,p2,p3,p4,p5,p6)\
  359.  CALLSYS(BTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2),\
  360. CAST(SHORTCARD,p3),CAST(SHORTCARD,p4),CAST(SHORTCARD,p5),CAST(LONGCARD,p6))
  361. #define BCALL1l(f,p)\
  362.  CALLSYS(BTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p))
  363.  
  364.  
  365. #define XCALL1l(f,p)\
  366.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p))
  367.  
  368.  
  369. #define DCALL0(f)\
  370.  CALLSYS(DTRAP,CAST(SHORTCARD,f))
  371. #define DCALL1w(f,p)\
  372.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p))
  373. #define DCALL2w(f,p1,p2)\
  374.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2))
  375. #define DCALL3w(f,p1,p2,p3)\
  376.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2),\
  377. CAST(SHORTCARD,p3))
  378. #define DCALL1w1l(f,p1,p2)\
  379.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2))
  380. #define DCALL1w2l(f,p1,p2,p3)\
  381.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2),\
  382. CAST(LONGCARD,p3))
  383. #define DCALL1w3l(f,p1,p2,p3,p4)\
  384.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2),\
  385. CAST(LONGCARD,p3),CAST(LONGCARD,p4))
  386. #define DCALL2w1l(f,p1,p2,p3)\
  387.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2),\
  388. CAST(LONGCARD,p3))
  389. #define DCALL2w2l(f,p1,p2,p3,p4)\
  390.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2),\
  391. CAST(LONGCARD,p3),CAST(LONGCARD,p4))
  392. #define DCALL1w1l1w(f,p1,p2,p3)\
  393.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2),\
  394. CAST(SHORTCARD,p3))
  395. #define DCALL1l(f,p)\
  396.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p))
  397. #define DCALL2l(f,p1,p2)\
  398.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(LONGCARD,p2))
  399. #define DCALL1l1w(f,p1,p2)\
  400.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(SHORTCARD,p2))
  401. #define DCALL1l2w(f,p1,p2,p3)\
  402.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(SHORTCARD,p2),\
  403. CAST(SHORTCARD,p3))
  404. #define DCALL1l1w1l(f,p1,p2,p3)\
  405.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(SHORTCARD,p2),\
  406. CAST(LONGCARD,p3))
  407.  
  408. #else
  409.  
  410. #define BCALL0(f)\
  411.  CODE(PSHC,f,BTRAP,ADDQ2)
  412. #define BCALL1w(f,p)\
  413.  SETREG(0,p);CODE(PSHW,PSHC,f,BTRAP,ADDQ4)
  414. #define BCALL2w(f,p1,p2)\
  415.  SETREG(0,p2);CODE(PSHW);SETREG(0,p1);CODE(PSHW,PSHC,f,BTRAP,ADDQ6)
  416. #define BCALL1w1l(f,p1,p2)\
  417.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHW,PSHC,f,BTRAP,ADDQ8)
  418. #define BCALL1w1l3w1l(f,p1,p2,p3,p4,p5,p6)\
  419.  SETREG(0,p6);CODE(PSHL);SETREG(0,p5);CODE(PSHW);SETREG(0,p4);CODE(PSHW);\
  420. SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  421. CODE(PSHW,PSHC,f,BTRAP,LEA,18)
  422. #define BCALL1l(f,p)\
  423.  SETREG(0,p);CODE(PSHL,PSHC,f,BTRAP,ADDQ6)
  424.  
  425.  
  426. #define XCALL1l(f,p)\
  427.  SETREG(0,p);CODE(PSHL,PSHC,f,XTRAP,ADDQ6)
  428.  
  429.  
  430. #define DCALL0(f)\
  431.  CODE(PSHC,f,DTRAP,ADDQ2)
  432. #define DCALL1w(f,p)\
  433.  SETREG(0,p);CODE(PSHW,PSHC,f,DTRAP,ADDQ4)
  434. #define DCALL2w(f,p1,p2)\
  435.  SETREG(0,p2);CODE(PSHW);SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,ADDQ6)
  436. #define DCALL3w(f,p1,p2,p3)\
  437.  SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  438. CODE(PSHW,PSHC,f,DTRAP,ADDQ8)
  439. #define DCALL1w1l(f,p1,p2)\
  440.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,ADDQ8)
  441. #define DCALL1w2l(f,p1,p2,p3)\
  442.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  443. CODE(PSHW,PSHC,f,DTRAP,LEA,12)
  444. #define DCALL1w3l(f,p1,p2,p3,p4)\
  445.  SETREG(0,p4);CODE(PSHL);SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHL);\
  446. SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,LEA,16)
  447. #define DCALL2w1l(f,p1,p2,p3)\
  448.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  449. CODE(PSHW,PSHC,f,DTRAP,LEA,10)
  450. #define DCALL2w2l(f,p1,p2,p3,p4)\
  451.  SETREG(0,p4);CODE(PSHL);SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);\
  452. SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,LEA,14)
  453. #define DCALL1w1l1w(f,p1,p2,p3)\
  454.  SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  455. CODE(PSHW,PSHC,f,DTRAP,LEA,10)
  456. #define DCALL1l(f,p)\
  457.  SETREG(0,p);CODE(PSHL,PSHC,f,DTRAP,ADDQ6)
  458. #define DCALL2l(f,p1,p2)\
  459.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHL,PSHC,f,DTRAP,LEA,10)
  460. #define DCALL1l1w(f,p1,p2)\
  461.  SETREG(0,p2);CODE(PSHW);SETREG(0,p1);CODE(PSHL,PSHC,f,DTRAP,ADDQ8)
  462. #define DCALL1l2w(f,p1,p2,p3)\
  463.  SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  464. CODE(PSHL,PSHC,f,DTRAP,LEA,10)
  465. #define DCALL1l1w1l(f,p1,p2,p3)\
  466.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  467. CODE(PSHL,PSHC,f,DTRAP,LEA,12)
  468.  
  469. #endif
  470.  
  471. /*==========================================================================*/
  472. /*                           "BIOS"-Calls                                   */
  473. /*==========================================================================*/
  474.  
  475. #define getmpb(_MPB)\
  476.  SAVEREGS\
  477.  BCALL1l(GETMPB,_MPB);\
  478.  RESTOREREGS
  479.  
  480. #define bconstat(_DEV,_READY)\
  481.  SAVEREGS\
  482.  BCALL1w(BCONSTAT,_DEV);\
  483.  RESTOREREGS\
  484.  GETSWREG(0,_READY)
  485.  
  486. #define bconin(_DEV,_KEY)\
  487.  SAVEREGS\
  488.  BCALL1w(CCONIN,_DEV);\
  489.  RESTOREREGS\
  490.  GETLREG(0,_KEY)
  491.  
  492. #define bconout(_DEV,_CHAR)\
  493.  SAVEREGS\
  494.  BCALL2w(BCONOUT,_DEV,_CHAR);\
  495.  RESTOREREGS
  496.  
  497. #define rwabs(_FLAG,_BUF,_CNT,_REC,_DEV,_LREC,_RES)\
  498.  SAVEREGS\
  499.  BCALL1w1l3w1l(RWABS,_FLAG,_BUF,_CNT,_REC,_DEV,_LREC);\
  500.  RESTOREREGS\
  501.  GETLREG(0,_RES)
  502.  
  503. #define setexc(_VEC,_ADR,_OLD)\
  504.  SAVEREGS\
  505.  BCALL1w1l(SETEXC,_VEC,_ADR);\
  506.  RESTOREREGS\
  507.  GETREGADR(0,_OLD)
  508.  
  509. #define tickcal(_MS)\
  510.  SAVEREGS\
  511.  BCALL0(TICKCAL);\
  512.  RESTOREREGS\
  513.  GETLREG(0,_MS)
  514.  
  515. #define bcostat(_DEV,_READY)\
  516.  SAVEREGS\
  517.  BCALL1w(BCOSTAT,_DEV);\
  518.  RESTOREREGS\
  519.  GETSWREG(0,_READY)
  520.  
  521. #define getbpb(_DEV,_BPB)\
  522.  SAVEREGS\
  523.  BCALL1w(GETBPB,_DEV);\
  524.  RESTOREREGS\
  525.  GETLREG(0,_BPB)
  526.  
  527. #define mediach(_DEV,_CHG)\
  528.  SAVEREGS\
  529.  BCALL1w(MEDIACH,_DEV);\
  530.  RESTOREREGS\
  531.  GETSWREG(0,_CHG)
  532.  
  533. #define drvmap(_DRIVES)\
  534.  SAVEREGS\
  535.  BCALL0(DRVMAP);\
  536.  RESTOREREGS\
  537.  GETLREG(0,_DRIVES)
  538.  
  539. #define kbshift(_MODE,_STAT)\
  540.  SAVEREGS\
  541.  BCALL1w(KBSHIFT,_MODE);\
  542.  RESTOREREGS\
  543.  GETLREG(0,_STAT)
  544.  
  545.  
  546. /*==========================================================================*/
  547. /*                           "XBIOS"-Calls                                  */
  548. /*==========================================================================*/
  549.  
  550. #define supexec(_PROC)\
  551.  SAVEREGS\
  552.  XCALL1l(SUPEXEC,_PROC);\
  553.  RESTOREREGS
  554.  
  555. /*==========================================================================*/
  556. /*                           "GEMDOS"-Calls                                 */
  557. /*==========================================================================*/
  558.  
  559.  
  560. #define p_term0()\
  561.  DCALL0(PTERM0)
  562.  
  563. #define c_conin(_KEY)\
  564.  SAVEREGS\
  565.  DCALL0(CCONIN);\
  566.  RESTOREREGS\
  567.  GETLREG(0,_KEY)
  568.  
  569. #define c_conout(_CHAR)\
  570.  SAVEREGS\
  571.  DCALL1w(CCONOUT,_CHAR);\
  572.  RESTOREREGS
  573.  
  574. #define c_auxin(_CHAR)\
  575.  SAVEREGS\
  576.  DCALL0(CAUXIN);\
  577.  RESTOREREGS\
  578.  GETSWREG(0,_CHAR)
  579.  
  580. #define c_auxout(_CHAR)\
  581.  SAVEREGS\
  582.  DCALL1w(CAUXOUT,_CHAR);\
  583.  RESTOREREGS
  584.  
  585. #define c_prnout(_CHAR)\
  586.  SAVEREGS\
  587.  DCALL1w(CPRNOUT,_CHAR);\
  588.  RESTOREREGS
  589.  
  590. #define c_rawio(_DAT,_RES)\
  591.  SAVEREGS\
  592.  DCALL1w(CRAWIO,_DAT);\
  593.  RESTOREREGS\
  594.  GETLREG(0,_RES)
  595.  
  596. #define c_rawcin(_KEY)\
  597.  SAVEREGS\
  598.  DCALL0(CRAWCIN);\
  599.  RESTOREREGS\
  600.  GETLREG(0,_KEY)
  601.  
  602. #define c_necin(_KEY)\
  603.  SAVEREGS\
  604.  DCALL0(CNECIN);\
  605.  RESTOREREGS\
  606.  GETLREG(0,_KEY)
  607.  
  608. #define c_conws(_STR)\
  609.  SAVEREGS\
  610.  DCALL1l(CCONWS,_STR);\
  611.  RESTOREREGS
  612.  
  613. #define c_conrs(_BUF)\
  614.  SAVEREGS\
  615.  DCALL1l(CCONRS,_BUF);\
  616.  RESTOREREGS
  617.  
  618. #define c_conis(_STAT)\
  619.  SAVEREGS\
  620.  DCALL0(CCONIS);\
  621.  RESTOREREGS\
  622.  GETSWREG(0,_STAT)
  623.  
  624. #define d_setdrv(_DRV,_DRIVES)\
  625.  SAVEREGS\
  626.  DCALL1w(DSETDRV,_DRV);\
  627.  RESTOREREGS\
  628.  GETLREG(0,_DRIVES)
  629.  
  630. #define c_conos(_STAT)\
  631.  SAVEREGS\
  632.  DCALL0(CCONOS);\
  633.  RESTOREREGS\
  634.  GETSWREG(0,_STAT)
  635.  
  636. #define c_prnos(_STAT)\
  637.  SAVEREGS\
  638.  DCALL0(CPRNOS);\
  639.  RESTOREREGS\
  640.  GETSWREG(0,_STAT)
  641.  
  642. #define c_auxis(_STAT)\
  643.  SAVEREGS\
  644.  DCALL0(CAUXIS);\
  645.  RESTOREREGS\
  646.  GETSWREG(0,_STAT)
  647.  
  648. #define c_auxos(_STAT)\
  649.  SAVEREGS\
  650.  DCALL0(CAUXOS);\
  651.  RESTOREREGS\
  652.  GETSWREG(0,_STAT)
  653.  
  654. #define m_addalt(_START,_SIZE,_RES)\
  655.  SAVEREGS\
  656.  DCALL2l(MADDALT,_START,_SIZE);\
  657.  RESTOREREGS\
  658.  GETSWREG(0,_RES)
  659.  
  660. #define s_realloc(_SIZE,_ADR)\
  661.  SAVEREGS\
  662.  DCALL1l(SREALLOC,_SIZE);\
  663.  RESTOREREGS\
  664.  GETREGADR(0,_ADR)
  665.  
  666. #define d_getdrv(_DRV)\
  667.  SAVEREGS\
  668.  DCALL0(DGETDRV);\
  669.  RESTOREREGS\
  670.  GETUWREG(0,_DRV)
  671.  
  672. #define f_setdta(_DTA)\
  673.  SAVEREGS\
  674.  DCALL1l(FSETDTA,_DTA);\
  675.  RESTOREREGS
  676.  
  677. #define s_uper(_DAT,_VAL)\
  678.  SAVEREGS\
  679.  DCALL1l(SUPER,_DAT);\
  680.  RESTOREREGS\
  681.  GETLREG(0,_VAL)
  682.  
  683. #define t_getdate(_DATE)\
  684.  SAVEREGS\
  685.  DCALL0(TGETDATE);\
  686.  RESTOREREGS\
  687.  GETUWREG(0,_DATE)
  688.  
  689. #define t_setdate(_DATE,_RES)\
  690.  SAVEREGS\
  691.  DCALL1w(TSETDATE,_DATE);\
  692.  RESTOREREGS\
  693.  GETSWREG(0,_RES)
  694.  
  695. #define t_gettime(_TIME)\
  696.  SAVEREGS\
  697.  DCALL0(TGETTIME);\
  698.  RESTOREREGS\
  699.  GETUWREG(0,_TIME)
  700.  
  701. #define t_settime(_TIME,_RES)\
  702.  SAVEREGS\
  703.  DCALL1w(TSETTIME,_TIME);\
  704.  RESTOREREGS\
  705.  GETSWREG(0,_RES)
  706.  
  707. #define f_getdta(_DTA)\
  708.  SAVEREGS\
  709.  DCALL0(FGETDTA);\
  710.  RESTOREREGS\
  711.  GETREGADR(0,_DTA)
  712.  
  713. #define s_version(_VERS)\
  714.  SAVEREGS\
  715.  DCALL0(SVERSION);\
  716.  RESTOREREGS\
  717.  GETUWREG(0,_VERS)
  718.  
  719. #define p_termres(_KEEP,_RET)\
  720.  DCALL1l1w(PTERMRES,_KEEP,_RET)
  721.  
  722. #define d_free(_BUF,_DRV,_RES)\
  723.  SAVEREGS\
  724.  DCALL1l1w(DFREE,_BUF,_DRV);\
  725.  RESTOREREGS\
  726.  GETSWREG(0,_RES)
  727.  
  728. #define d_create(_DIR,_RES)\
  729.  SAVEREGS\
  730.  DCALL1l(DCREATE,_DIR);\
  731.  RESTOREREGS\
  732.  GETSWREG(0,_RES)
  733.  
  734. #define d_delete(_DIR,_RES)\
  735.  SAVEREGS\
  736.  DCALL1l(DDELETE,_DIR);\
  737.  RESTOREREGS\
  738.  GETSWREG(0,_RES)
  739.  
  740. #define d_setpath(_PATH,_RES)\
  741.  SAVEREGS\
  742.  DCALL1l(DSETPATH,_PATH);\
  743.  RESTOREREGS\
  744.  GETSWREG(0,_RES)
  745.  
  746. #define f_create(_FILE,_ATTR,_HNDL)\
  747.  SAVEREGS\
  748.  DCALL1l1w(FCREATE,_FILE,_ATTR);\
  749.  RESTOREREGS\
  750.  GETLREG(0,_HNDL)
  751.  
  752. #define f_open(_FILE,_MODE,_HNDL)\
  753.  SAVEREGS\
  754.  DCALL1l1w(FOPEN,_FILE,_MODE);\
  755.  RESTOREREGS\
  756.  GETLREG(0,_HNDL)
  757.  
  758. #define f_close(_HNDL,_RES)\
  759.  SAVEREGS\
  760.  DCALL1w(FCLOSE,_HNDL);\
  761.  RESTOREREGS\
  762.  GETSWREG(0,_RES)
  763.  
  764. #define f_read(_HNDL,_LEN,_BUF,_CNT)\
  765.  SAVEREGS\
  766.  DCALL1w2l(FREAD,_HNDL,_LEN,_BUF);\
  767.  RESTOREREGS\
  768.  GETLREG(0,_CNT)
  769.  
  770. #define f_write(_HNDL,_LEN,_BUF,_CNT)\
  771.  SAVEREGS\
  772.  DCALL1w2l(FWRITE,_HNDL,_LEN,_BUF);\
  773.  RESTOREREGS\
  774.  GETLREG(0,_CNT)
  775.  
  776. #define f_delete(_FILE,_RES)\
  777.  SAVEREGS\
  778.  DCALL1l(FDELETE,_FILE);\
  779.  RESTOREREGS\
  780.  GETSWREG(0,_RES)
  781.  
  782. #define f_seek(_OFF,_HNDL,_MODE,_POS)\
  783.  SAVEREGS\
  784.  DCALL1l2w(FSEEK,_OFF,_HNDL,_MODE);\
  785.  RESTOREREGS\
  786.  GETLREG(0,_POS)
  787.  
  788. #define f_attrib(_FILE,_FLAG,_ATTR,_OLD)\
  789.  SAVEREGS\
  790.  DCALL1l2w(FATTRIB,_FILE,_FLAG,_ATTR);\
  791.  RESTOREREGS\
  792.  GETLREG(0,_OLD)
  793.  
  794. #define m_xalloc(_SIZE,_MODE,_ADR)\
  795.  SAVEREGS\
  796.  DCALL1l1w(MXALLOC,_SIZE,_MODE);\
  797.  RESTOREREGS\
  798.  GETREGADR(0,_ADR)
  799.  
  800. #define f_dup(_STD,_HNDL)\
  801.  SAVEREGS\
  802.  DCALL1w(FDUP,_STD);\
  803.  RESTOREREGS\
  804.  GETLREG(0,_HNDL)
  805.  
  806. #define f_force(_STD,_HNDL,_RES)\
  807.  SAVEREGS\
  808.  DCALL2w(FFORCE,_STD,_HNDL);\
  809.  RESTOREREGS\
  810.  GETSWREG(0,_RES)
  811.  
  812. #define d_getpath(_PATH,_DRV,_RES)\
  813.  SAVEREGS\
  814.  DCALL1l1w(DGETPATH,_PATH,_DRV);\
  815.  RESTOREREGS\
  816.  GETSWREG(0,_RES)
  817.  
  818. #define m_alloc(_SIZE,_ADR)\
  819.  SAVEREGS\
  820.  DCALL1l(MALLOC,_SIZE);\
  821.  RESTOREREGS\
  822.  GETREGADR(0,_ADR)
  823.  
  824. #define m_free(_ADR,_RES)\
  825.  SAVEREGS\
  826.  DCALL1l(MFREE,_ADR);\
  827.  RESTOREREGS\
  828.  GETSWREG(0,_RES)
  829.  
  830. #define m_shrink(_ADR,_SIZE,_RES)\
  831.  SAVEREGS\
  832.  DCALL1w2l(MSHRINK,0,_ADR,_SIZE);\
  833.  RESTOREREGS\
  834.  GETSWREG(0,_RES)
  835.  
  836. #define p_exec(_MODE,_PROG,_TAIL,_ENV,_RES)\
  837.  SAVEREGS\
  838.  DCALL1w3l(PEXEC,_MODE,_PROG,_TAIL,_ENV);\
  839.  RESTOREREGS\
  840.  GETLREG(0,_RES)
  841.  
  842. #define p_term(_RET)\
  843.  DCALL1w(PTERM,_RET)
  844.  
  845. #define f_sfirst(_FILE,_ATTR,_RES)\
  846.  SAVEREGS\
  847.  DCALL1l1w(FSFIRST,_FILE,_ATTR);\
  848.  RESTOREREGS\
  849.  GETSWREG(0,_RES)
  850.  
  851. #define f_snext(_RES)\
  852.  SAVEREGS\
  853.  DCALL0(FSNEXT);\
  854.  RESTOREREGS\
  855.  GETSWREG(0,_RES)
  856.  
  857. #define f_rename(_OLD,_NEW,_RES)\
  858.  SAVEREGS\
  859.  DCALL1w2l(FRENAME,0,_OLD,_NEW);\
  860.  RESTOREREGS\
  861.  GETSWREG(0,_RES)
  862.  
  863. #define f_datime(_DATIME,_FILE,_FLAG)\
  864.  SAVEREGS\
  865.  DCALL1l2w(FDATIME,_DATIME,_FILE,_FLAG);\
  866.  RESTOREREGS
  867.  
  868. #define f_lock(_HDL,_MODE,_FROM,_LEN,_RES)\
  869.  SAVEREGS\
  870.  DCALL2w2l(FLOCK,_HDL,_MODE,_FROM,_LEN);\
  871.  RESTOREREGS\
  872.  GETSWREG(0,_RES)
  873.  
  874.  
  875.  
  876. /*==========================================================================*/
  877. /*                      MultiGEM-Calls                                      */
  878. /*==========================================================================*/
  879.  
  880. #define m_fork(_PRG,_CMD,_RES)\
  881.  SAVEREGS\
  882.  DCALL1l1w1l(MFORK,_PRG,5AA7H,_CMD);\
  883.  RESTOREREGS\
  884.  GETSWREG(0,_RES)
  885.  
  886.  
  887.  
  888. /*==========================================================================*/
  889. /*                      Mag!X-Calls                                         */
  890. /*==========================================================================*/
  891.  
  892. #define s_config(_MODE,_SET,_RES)\
  893.  SAVEREGS\
  894.  DCALL1w1l(SCONFIG,_MODE,_SET);\
  895.  RESTOREREGS\
  896.  GETLREG(0,_RES)
  897.  
  898.  
  899.  
  900. /*==========================================================================*/
  901. /*                      MiNT-Calls                                          */
  902. /*==========================================================================*/
  903.  
  904. #define s_yield()\
  905.  SAVEREGS\
  906.  DCALL0(SYIELD);\
  907.  RESTOREREGS
  908.  
  909. #define f_pipe(_PTR,_RES)\
  910.  SAVEREGS\
  911.  DCALL1l(FPIPE,_PTR);\
  912.  RESTOREREGS\
  913.  GETSWREG(0,_RES)
  914.  
  915. #define f_cntl(_HNDL,_ARG,_CMD,_RES)\
  916.  SAVEREGS\
  917.  DCALL1w1l1w(FCNTL,_HNDL,_ARG,_CMD);\
  918.  RESTOREREGS\
  919.  GETLREG(0,_RES)
  920.  
  921. #define f_instat(_HNDL,_CNT)\
  922.  SAVEREGS\
  923.  DCALL1w(FINSTAT,_HNDL);\
  924.  RESTOREREGS\
  925.  GETLREG(0,_CNT)
  926.  
  927. #define f_outstat(_HNDL,_CNT)\
  928.  SAVEREGS\
  929.  DCALL1w(FOUTSTAT,_HNDL);\
  930.  RESTOREREGS\
  931.  GETLREG(0,_CNT)
  932.  
  933. #define f_getchar(_HNDL,_MODE,_RES)\
  934.  SAVEREGS\
  935.  DCALL2w(FGETCHAR,_HNDL,_MODE);\
  936.  RESTOREREGS\
  937.  GETLREG(0,_RES)
  938.  
  939. #define f_putchar(_HNDL,_CHAR,_MODE,_RES)\
  940.  SAVEREGS\
  941.  DCALL1w1l1w(FPUTCHAR,_HNDL,_CHAR,_MODE);\
  942.  RESTOREREGS\
  943.  GETLREG(0,_RES)
  944.  
  945. #define p_wait(_RES)\
  946.  SAVEREGS\
  947.  DCALL0(PWAIT);\
  948.  RESTOREREGS\
  949.  GETLREG(0,_RES)
  950.  
  951. #define p_nice(_DELTA,_PRIO)\
  952.  SAVEREGS\
  953.  DCALL1w(PNICE,_DELTA);\
  954.  RESTOREREGS\
  955.  GETLREG(0,_PRIO)
  956.  
  957. #define p_getpid(_PID)\
  958.  SAVEREGS\
  959.  DCALL0(PGETPID);\
  960.  RESTOREREGS\
  961.  GETUWREG(0,_PID)
  962.  
  963. #define p_getppid(_PPID)\
  964.  SAVEREGS\
  965.  DCALL0(PGETPPID);\
  966.  RESTOREREGS\
  967.  GETUWREG(0,_PPID)
  968.  
  969. #define p_getpgrp(_PGRP)\
  970.  SAVEREGS\
  971.  DCALL0(PGETPGRP);\
  972.  RESTOREREGS\
  973.  GETUWREG(0,_PGRP)
  974.  
  975. #define p_setpgrp(_PID,_GRP,_RES)\
  976.  SAVEREGS\
  977.  DCALL2w(PSETPGRP,_PID,_GRP);\
  978.  RESTOREREGS\
  979.  GETSWREG(0,_RES)
  980.  
  981. #define p_getuid(_UID)\
  982.  SAVEREGS\
  983.  DCALL0(PGETUID);\
  984.  RESTOREREGS\
  985.  GETUWREG(0,_UID)
  986.  
  987. #define p_setuid(_UID,_RES)\
  988.  SAVEREGS\
  989.  DCALL1w(PSETUID,_UID);\
  990.  RESTOREREGS\
  991.  GETSWREG(0,_RES)
  992.  
  993. #define p_kill(_PID,_SIG,_RES)\
  994.  SAVEREGS\
  995.  DCALL2w(PKILL,_PID,_SIG);\
  996.  RESTOREREGS\
  997.  GETSWREG(0,_RES)
  998.  
  999. #define p_signal(_SIG,_HANDLER,_OLD)\
  1000.  SAVEREGS\
  1001.  DCALL1w1l(PSIGNAL,_SIG,_HANDLER);\
  1002.  RESTOREREGS\
  1003.  GETREGADR(0,_OLD)
  1004.  
  1005. #define p_vfork(_RES)\
  1006.  SAVEREGS\
  1007.  DCALL0(PVFORK);\
  1008.  RESTOREREGS\
  1009.  GETSWREG(0,_RES)
  1010.  
  1011. #define p_getgid(_GID)\
  1012.  SAVEREGS\
  1013.  DCALL0(PGETGID);\
  1014.  RESTOREREGS\
  1015.  GETUWREG(0,_GID)
  1016.  
  1017. #define p_setgid(_GID,_RES)\
  1018.  SAVEREGS\
  1019.  DCALL1w(PSETGID,_GID);\
  1020.  RESTOREREGS\
  1021.  GETSWREG(0,_RES)
  1022.  
  1023. #define p_sigblock(_MASK,_OLD)\
  1024.  SAVEREGS\
  1025.  DCALL1l(PSIGBLOCK,_MASK);\
  1026.  RESTOREREGS\
  1027.  GETLREG(0,_OLD)
  1028.  
  1029. #define p_sigsetmask(_MASK,_OLD)\
  1030.  SAVEREGS\
  1031.  DCALL1l(PSIGSETMASK,_MASK);\
  1032.  RESTOREREGS\
  1033.  GETLREG(0,_OLD)
  1034.  
  1035. #define p_usrval(_ARG,_VAL)\
  1036.  SAVEREGS\
  1037.  DCALL1l(PUSRVAL,_ARG);\
  1038.  RESTOREREGS\
  1039.  GETLREG(0,_VAL)
  1040.  
  1041. #define p_domain(_DOM,_OLD)\
  1042.  SAVEREGS\
  1043.  DCALL1w(PDOMAIN,_DOM);\
  1044.  RESTOREREGS\
  1045.  GETSWREG(0,_OLD)
  1046.  
  1047. #define p_sigreturn()\
  1048.  SAVEREGS\
  1049.  DCALL0(PSIGRETURN);\
  1050.  RESTOREREGS
  1051.  
  1052. #define p_fork(_RES)\
  1053.  SAVEREGS\
  1054.  DCALL0(PFORK);\
  1055.  RESTOREREGS\
  1056.  GETSWREG(0,_RES)
  1057.  
  1058. #define p_wait3(_FLAG,_RUSAGE,_RES)\
  1059.  SAVEREGS\
  1060.  DCALL1w1l(PWAIT3,_FLAG,_RUSAGE);\
  1061.  RESTOREREGS\
  1062.  GETLREG(0,_RES)
  1063.  
  1064. #define f_select(_TIMEOUT,_RFDS,_WFDS,_XFDS,_RES)\
  1065.  SAVEREGS\
  1066.  DCALL1w3l(FSELECT,_TIMEOUT,_RFDS,_WFDS,_XFDS);\
  1067.  RESTOREREGS\
  1068.  GETSWREG(0,_RES)
  1069.  
  1070. #define p_rusage(_RSCADR)\
  1071.  SAVEREGS\
  1072.  DCALL1l(PRUSAGE,_RSCADR);\
  1073.  RESTOREREGS
  1074.  
  1075. #define p_setlimit(_LIM,_VAL,_OLD)\
  1076.  SAVEREGS\
  1077.  DCALL1w1l(PSETLIMIT,_LIM,_VAL);\
  1078.  RESTOREREGS\
  1079.  GETLREG(0,_OLD)
  1080.  
  1081. #define t_alarm(_SECS,_OLD)\
  1082.  SAVEREGS\
  1083.  DCALL1l(TALARM,_SECS);\
  1084.  RESTOREREGS\
  1085.  GETLREG(0,_OLD)
  1086.  
  1087. #define p_ause()\
  1088.  SAVEREGS\
  1089.  DCALL0(PAUSE);\
  1090.  RESTOREREGS
  1091.  
  1092. #define s_ysconf(_WHICH,_VAL)\
  1093.  SAVEREGS\
  1094.  DCALL1w(SYSCONF,_WHICH);\
  1095.  RESTOREREGS\
  1096.  GETLREG(0,_VAL)
  1097.  
  1098. #define p_sigpending(_SIGS)\
  1099.  SAVEREGS\
  1100.  DCALL0(PSIGPENDING);\
  1101.  RESTOREREGS\
  1102.  GETLREG(0,_SIGS)
  1103.  
  1104. #define d_pathconf(_NAME,_WHICH,_VAL)\
  1105.  SAVEREGS\
  1106.  DCALL1l1w(DPATHCONF,_NAME,_WHICH);\
  1107.  RESTOREREGS\
  1108.  GETLREG(0,_VAL)
  1109.  
  1110. #define p_msg(_MODE,_MBOXID,_MSGPTR,_RES)\
  1111.  SAVEREGS\
  1112.  DCALL1w2l(PMSG,_MODE,_MBOXID,_MSGPTR);\
  1113.  RESTOREREGS\
  1114.  GETSWREG(0,_RES)
  1115.  
  1116. #define f_midipipe(_PID,_IN,_OUT,_RES)\
  1117.  SAVEREGS\
  1118.  DCALL3w(FMIDIPIPE,_PID,_IN,_OUT);\
  1119.  RESTOREREGS\
  1120.  GETSWREG(0,_RES)
  1121.  
  1122. #define p_renice(_PID,_DELTA,_CURRENT)\
  1123.  SAVEREGS\
  1124.  DCALL2w(PRENICE,_PID,_DELTA);\
  1125.  RESTOREREGS\
  1126.  GETLREG(0,_CURRENT)
  1127.  
  1128. #define d_opendir(_NAME,_FLAG,_DIR)\
  1129.  SAVEREGS\
  1130.  DCALL1l1w(DOPENDIR,_NAME,_FLAG);\
  1131.  RESTOREREGS\
  1132.  GETLREG(0,_DIR)
  1133.  
  1134. #define d_readdir(_LEN,_DIR,_BUF,_RES)\
  1135.  SAVEREGS\
  1136.  DCALL1w2l(DREADDIR,_LEN,_DIR,_BUF);\
  1137.  RESTOREREGS\
  1138.  GETSWREG(0,_RES)
  1139.  
  1140. #define d_rewinddir(_DIR,_RES)\
  1141.  SAVEREGS\
  1142.  DCALL1l(DREWINDDIR,_DIR);\
  1143.  RESTOREREGS\
  1144.  GETSWREG(0,_RES)
  1145.  
  1146. #define d_closedir(_DIR,_RES)\
  1147.  SAVEREGS\
  1148.  DCALL1l(DCLOSEDIR,_DIR);\
  1149.  RESTOREREGS\
  1150.  GETSWREG(0,_RES)
  1151.  
  1152. #define f_xattr(_FLAG,_NAME,_XATTR,_RES)\
  1153.  SAVEREGS\
  1154.  DCALL1w2l(FXATTR,_FLAG,_NAME,_XATTR);\
  1155.  RESTOREREGS\
  1156.  GETSWREG(0,_RES)
  1157.  
  1158. #define f_link(_OLD,_NEW,_RES)\
  1159.  SAVEREGS\
  1160.  DCALL2l(FLINK,_OLD,_NEW);\
  1161.  RESTOREREGS\
  1162.  GETSWREG(0,_RES)
  1163.  
  1164. #define f_symlink(_OLD,_NEW,_RES)\
  1165.  SAVEREGS\
  1166.  DCALL2l(FSYMLINK,_OLD,_NEW);\
  1167.  RESTOREREGS\
  1168.  GETSWREG(0,_RES)
  1169.  
  1170. #define f_readlink(_BUFSIZ,_BUF,_NAME,_RES)\
  1171.  SAVEREGS\
  1172.  DCALL1w2l(FREADLINK,_BUFSIZ,_BUF,_NAME);\
  1173.  RESTOREREGS\
  1174.  GETSWREG(0,_RES)
  1175.  
  1176. #define d_cntl(_CMD,_NAME,_ARG,_RES)\
  1177.  SAVEREGS\
  1178.  DCALL1w2l(DCNTL,_CMD,_NAME,_ARG);\
  1179.  RESTOREREGS\
  1180.  GETLREG(0,_RES)
  1181.  
  1182. #define f_chown(_FILE,_UID,_GID,_RES)\
  1183.  SAVEREGS\
  1184.  DCALL1l2w(FCHOWN,_FILE,_UID,_GID);\
  1185.  RESTOREREGS\
  1186.  GETSWREG(0,_RES)
  1187.  
  1188. #define f_chmod(_FILE,_MODE,_RES)\
  1189.  SAVEREGS\
  1190.  DCALL1l1w(FCHMOD,_FILE,_MODE);\
  1191.  RESTOREREGS\
  1192.  GETSWREG(0,_RES)
  1193.  
  1194. #define p_umask(_MODE,_OLD)\
  1195.  SAVEREGS\
  1196.  DCALL1w(PUMASK,_MODE);\
  1197.  RESTOREREGS\
  1198.  GETUWREG(0,_OLD)
  1199.  
  1200. #define p_semaphore(_MODE,_ID,_TOUT,_RES)\
  1201.  SAVEREGS\
  1202.  DCALL1w2l(PSEMAPHORE,_MODE,_ID,_TOUT);\
  1203.  RESTOREREGS\
  1204.  GETLREG(0,_RES)
  1205.  
  1206. #define d_lock(_MODE,_DRV,_RES)\
  1207.  SAVEREGS\
  1208.  DCALL2w(DLOCK,_MODE,_DRV);\
  1209.  RESTOREREGS\
  1210.  GETSWREG(0,_RES)
  1211.  
  1212. #define p_sigpause(_SIGMASK)\
  1213.  SAVEREGS\
  1214.  DCALL1l(PSIGPAUSE,_SIGMASK);\
  1215.  RESTOREREGS
  1216.  
  1217. #define p_sigaction(_SIG,_ACT,_OACT,_RES)\
  1218.  SAVEREGS\
  1219.  DCALL1w2l(PSIGACTION,_SIG,_ACT,_OACT);\
  1220.  RESTOREREGS\
  1221.  GETSWREG(0,_RES)
  1222.  
  1223. #define p_geteuid(_EUID)\
  1224.  SAVEREGS\
  1225.  DCALL0(PGETEUID);\
  1226.  RESTOREREGS\
  1227.  GETUWREG(0,_EUID)
  1228.  
  1229. #define p_getegid(_EGID)\
  1230.  SAVEREGS\
  1231.  DCALL0(PGETEGID);\
  1232.  RESTOREREGS\
  1233.  GETUWREG(0,_EGID)
  1234.  
  1235. #define p_waitpid(_PID,_FLAG,_RUSAGE,_RES)\
  1236.  SAVEREGS\
  1237.  DCALL2w1l(PWAITPID,_PID,_FLAG,_RUSAGE);\
  1238.  RESTOREREGS\
  1239.  GETLREG(0,_RES)
  1240.  
  1241. #define d_getcwd(_PATH,_DRV,_SIZE,_RES)\
  1242.  SAVEREGS\
  1243.  DCALL1l2w(DGETCWD,_PATH,_DRV,_SIZE);\
  1244.  RESTOREREGS\
  1245.  GETSWREG(0,_RES)
  1246.  
  1247. #define s_alert(_MSG)\
  1248.  SAVEREGS\
  1249.  DCALL1l(SALERT,_MSG);\
  1250.  RESTOREREGS
  1251.  
  1252.